SQL vs NoSQL
Sokan vannak ma még, akik felteszik azt a nagyszerű kérést, hogy mi fán is terem az a NoSQL? Nagy vonalakban ez is adattárolási módszer, de teljesen más elveken nyugszik, mint a hagyományos RDBMS, azaz strukturált adatbázisok adattárolási módszere. Leginkább JSON szerű adatfájlokat használ és nem adattáblákat, valamint minden egyes entitásnak saját külön dokumentuma (fájlja) van, amelyek között az azonos mezőnév+érték párossal lehet kapcsolatot teremteni.
Elsősorban ott alkalmazzák, ahol nem annyira döntő a struktúrált adattárolás, hanem inkább a nagy mennyiségű adatok minél gyorsabb lekérdezése az elsődleges.
GYIK, azaz a döntő kérdések, amelyek felmerülhetnek akkor, amikor dönteni kell, hogy melyiket is válasszuk:
- milyen adataim vannak?
- jelenlegi adatainkat hogyan tároljuk?
- mennyire fontos az adatbázis tranzakciók pontossága?
- mennyire fontos a sebesség?
- esetleg fel tudjuk-e osztani az adatokat aszerint, hogy mind az RDBMS, mind a NoSQL előnyeit ki tudjuk használni?
Pár fontos információ a NoSQL és hagyományos RDBMS kapcsán, ami döntő lehet:
Robosztusság, biztonság, szabadság kérdése:
- az RDBMS már sok évtizede létezik, mögötte ugyanennyi tapasztalat is van, szemben a NoSQL-lel, ami igazából az elmúlt évtizedben terjedt el nagyobb körben
- ezáltal a rdbms rendkívül sokoldalú, nagyon komplex lekérdezéseket, alkalmazásokat lehet rajta futtatni
- biztonságos olyan szempontból, hogy már a tervezése során el kell dönteni a pontos adatbázis struktúrát, a táblákat, mezőket, típusokat, kapcsolatokat, stb.
- amennyiben viszont ez a stabilitás nem olyan fontos számunkra, és megfelelő számunkra a nagyobb szabadság, akár az is, hogy akár minden entitás/dokumentum eltérő mezőkkel rendelkezhet, akkor a NoSQL is jó választás lehet
- ezzel szemben amennyiben az igény a biztos alapokon nyugvó, multi-row tranzakciók futtatása, akkor a hagyományos SQL lehet a megfelelő
Skálázhatóság:
- amennyiben arról van szó, hogy mindennél döntőbb a lekérdezések gyorsaságának igénye, akár a fentebbi biztos háttér oltárán is, akkor a NoSQL jó választás lehet. A NoSQL ugyanis horizontálisan (azaz akár dokumentum szinten) is skálázható, nem csak a nagyobb RDBMS féle módszerrel, amikor sok esetben csak a több RAM, CPU segíthet a hatékonységon (ha már minden indexelési, kód javítási kísérleten túlestünk persze)
- emiatt nagy mennyiségű adat tárolása esetén a NoSQL megoldások általában jóval nagyobb hatékonyságot, sebességet tudnak nyújtani
- fontos viszont, hogy mivel teljesen más a két adatbázis forma adattárolási módja, ezért az SQL a hagyományos, több táblára osztott, redundancia és adat duplikáció mentes, robosztus SQL lekérdezésekben megfelelő sebességet tud nyújtani
- másik oldalról viszont a strukturálatlan, nagy méretű adatbázisok esetében a NoSQL igen jó eredményt tud nyújtani.
A döntéshez tehát a fenti alapelveket érdemes figyelembe venni. Lényeg, hogy minden attól függ, hogy mire akarjuk használni. Lehet, hogy a Google NoSQL-t használ, de egy biztonságos, kevesebb adattal dolgozó stabil hátterű banki rendszernél lehet hogy inkább az SQL lesz a jó választás. A döntés minden esetben sok tényezős kérdés, ezért itt sem lehet egzakt választ adni erre a kérdésre.
Legközelebb folytatjuk egy kis MongoDB ismerkedéssel, ami a NoSQL adatbázisok egyik zászlóshajója manapság, és konkrét példákkal nézzük át a MongoDB alapjait, sőt még Spring-ben is összedobunk egy API-t, ami a MongoDB adatait szedi át.